#ifndef IO_CONTROL_H
#define IO_CONTROL_H

#include "include.h"

#define Normal          1
#define Abnormal        0

#define Close           1
#define Open            0

#define GPIO_Alert_24V_ReadPin          HAL_GPIO_ReadPin(Alert_24V_GPIO_Port, Alert_24V_Pin)

#define GPIO_Alert_12V_ReadPin          HAL_GPIO_ReadPin(Alert_12V_GPIO_Port, Alert_12V_Pin)

#define GPIO_OT_INT_ReadPin             HAL_GPIO_ReadPin(OT_INT_GPIO_Port, OT_INT_Pin)

#define GPIO_DI0_MCU_ReadPin            HAL_GPIO_ReadPin(DI0_MCU_GPIO_Port, DI0_MCU_Pin)

#define GPIO_DI1_MCU_ReadPin            HAL_GPIO_ReadPin(DI1_MCU_GPIO_Port, DI1_MCU_Pin)

#define GPIO_DI2_MCU_ReadPin            HAL_GPIO_ReadPin(DI2_MCU_GPIO_Port, DI2_MCU_Pin)

#define GPIO_DI3_MCU_ReadPin            HAL_GPIO_ReadPin(DI3_MCU_GPIO_Port, DI3_MCU_Pin)

#define GPIO_DI4_MCU_ReadPin            HAL_GPIO_ReadPin(DI4_MCU_GPIO_Port, DI4_MCU_Pin)

#define GPIO_KEY_ID1_ReadPin            HAL_GPIO_ReadPin(KEY_ID1_GPIO_Port, KEY_ID1_Pin)

#define GPIO_KEY_ID2_ReadPin            HAL_GPIO_ReadPin(KEY_ID2_GPIO_Port, KEY_ID2_Pin)

#define GPIO_PWRKEY_SET                 HAL_GPIO_WritePin(PWRKEY_GPIO_Port, PWRKEY_Pin, GPIO_PIN_SET  )
#define GPIO_PWRKEY_RESET               HAL_GPIO_WritePin(PWRKEY_GPIO_Port, PWRKEY_Pin, GPIO_PIN_RESET)

#define GPIO_RESET_H_SET                HAL_GPIO_WritePin(RESET_H_GPIO_Port, RESET_H_Pin, GPIO_PIN_SET  )
#define GPIO_RESET_H_RESET              HAL_GPIO_WritePin(RESET_H_GPIO_Port, RESET_H_Pin, GPIO_PIN_RESET)

#define GPIO_Display_EN1_SET            HAL_GPIO_WritePin(Display_EN1_GPIO_Port, Display_EN1_Pin, GPIO_PIN_SET  )
#define GPIO_Display_EN1_RESET          HAL_GPIO_WritePin(Display_EN1_GPIO_Port, Display_EN1_Pin, GPIO_PIN_RESET)

#define GPIO_Display_EN2_SET            HAL_GPIO_WritePin(Display_EN2_GPIO_Port, Display_EN2_Pin, GPIO_PIN_SET  )
#define GPIO_Display_EN2_RESET          HAL_GPIO_WritePin(Display_EN2_GPIO_Port, Display_EN2_Pin, GPIO_PIN_RESET)

#define GPIO_P24V_Encoder_EN_SET        HAL_GPIO_WritePin(P24V_Encoder_EN_GPIO_Port, P24V_Encoder_EN_Pin, GPIO_PIN_SET  )
#define GPIO_P24V_Encoder_EN_RESET      HAL_GPIO_WritePin(P24V_Encoder_EN_GPIO_Port, P24V_Encoder_EN_Pin, GPIO_PIN_RESET)

#define GPIO_P24V_Water_EN_SET          HAL_GPIO_WritePin(P24V_Water_EN_GPIO_Port, P24V_Water_EN_Pin, GPIO_PIN_SET  )
#define GPIO_P24V_Water_EN_RESET        HAL_GPIO_WritePin(P24V_Water_EN_GPIO_Port, P24V_Water_EN_Pin, GPIO_PIN_RESET)

#define GPIO_MCU_IO1_SET                HAL_GPIO_WritePin(MCU_IO1_GPIO_Port, MCU_IO1_Pin, GPIO_PIN_SET  )
#define GPIO_MCU_IO1_RESET              HAL_GPIO_WritePin(MCU_IO1_GPIO_Port, MCU_IO1_Pin, GPIO_PIN_RESET)

#define GPIO_MCU_IO2_SET                HAL_GPIO_WritePin(MCU_IO2_GPIO_Port, MCU_IO2_Pin, GPIO_PIN_SET  )
#define GPIO_MCU_IO2_RESET              HAL_GPIO_WritePin(MCU_IO2_GPIO_Port, MCU_IO2_Pin, GPIO_PIN_RESET)

#define GPIO_SPI1_CS_SET                HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET  )
#define GPIO_SPI1_CS_RESET              HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET)

#define GPIO_FAN_EN_SET                 HAL_GPIO_WritePin(FAN_EN_GPIO_Port, FAN_EN_Pin, GPIO_PIN_SET  )
#define GPIO_FAN_EN_RESET               HAL_GPIO_WritePin(FAN_EN_GPIO_Port, FAN_EN_Pin, GPIO_PIN_RESET)
#define GPIO_FAN_ReadPin                HAL_GPIO_ReadPin(FAN_EN_GPIO_Port, FAN_EN_Pin)

#define GPIO_LED_1_MCU_SET              HAL_GPIO_WritePin(LED_1_MCU_GPIO_Port, LED_1_MCU_Pin, GPIO_PIN_SET  )
#define GPIO_LED_1_MCU_RESET            HAL_GPIO_WritePin(LED_1_MCU_GPIO_Port, LED_1_MCU_Pin, GPIO_PIN_RESET)
#define GPIO_LED_1_MCU_Toggle           HAL_GPIO_TogglePin(LED_1_MCU_GPIO_Port, LED_1_MCU_Pin)


#define GPIO_MCU_WDI_SET                HAL_GPIO_WritePin(MCU_WDI_GPIO_Port, MCU_WDI_Pin, GPIO_PIN_SET  )
#define GPIO_MCU_WDI_RESET              HAL_GPIO_WritePin(MCU_WDI_GPIO_Port, MCU_WDI_Pin, GPIO_PIN_RESET)
#define GPIO_MCU_WDI_Toggle             HAL_GPIO_TogglePin(MCU_WDI_GPIO_Port, MCU_WDI_Pin)

#define GPIO_LED_SET                    HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET  )
#define GPIO_LED_RESET                  HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET)
#define GPIO_LED_Toggle                 HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin)

#define GPIO_UART3_DE_SET               HAL_GPIO_WritePin(UART3_DE_GPIO_Port, UART3_DE_Pin, GPIO_PIN_SET  )
#define GPIO_UART3_DE_RESET             HAL_GPIO_WritePin(UART3_DE_GPIO_Port, UART3_DE_Pin, GPIO_PIN_RESET)

#define GPIO_UART3_RE_SET               HAL_GPIO_WritePin(UART3_RE_GPIO_Port, UART3_RE_Pin, GPIO_PIN_SET  )
#define GPIO_UART3_RE_RESET             HAL_GPIO_WritePin(UART3_RE_GPIO_Port, UART3_RE_Pin, GPIO_PIN_RESET)

#define GPIO_UART4_DE_SET               HAL_GPIO_WritePin(UART4_DE_GPIO_Port, UART4_DE_Pin, GPIO_PIN_SET  )
#define GPIO_UART4_DE_RESET             HAL_GPIO_WritePin(UART4_DE_GPIO_Port, UART4_DE_Pin, GPIO_PIN_RESET)
#define GPIO_UART4_DE_ReadPin           HAL_GPIO_ReadPin(UART4_DE_GPIO_Port, UART4_DE_Pin)

#define GPIO_UART4_RE_SET               HAL_GPIO_WritePin(UART4_RE_GPIO_Port, UART4_RE_Pin, GPIO_PIN_SET  )
#define GPIO_UART4_RE_RESET             HAL_GPIO_WritePin(UART4_RE_GPIO_Port, UART4_RE_Pin, GPIO_PIN_RESET)
#define GPIO_UART4_RE_ReadPin           HAL_GPIO_ReadPin(UART4_RE_GPIO_Port, UART4_RE_Pin)

#define GPIO_UART5_DE_SET               HAL_GPIO_WritePin(UART5_DE_GPIO_Port, UART5_DE_Pin, GPIO_PIN_SET  )
#define GPIO_UART5_DE_RESET             HAL_GPIO_WritePin(UART5_DE_GPIO_Port, UART5_DE_Pin, GPIO_PIN_RESET)
#define GPIO_UART5_DE_ReadPin           HAL_GPIO_ReadPin(UART5_DE_GPIO_Port, UART5_DE_Pin)

#define GPIO_UART5_RE_SET               HAL_GPIO_WritePin(UART5_RE_GPIO_Port, UART5_RE_Pin, GPIO_PIN_SET  )
#define GPIO_UART5_RE_RESET             HAL_GPIO_WritePin(UART5_RE_GPIO_Port, UART5_RE_Pin, GPIO_PIN_RESET)
#define GPIO_UART5_RE_ReadPin           HAL_GPIO_ReadPin(UART5_RE_GPIO_Port, UART5_RE_Pin)

#define GPIO_P5V_Encoder_EN1_SET        HAL_GPIO_WritePin(P5V_Encoder_EN1_GPIO_Port, P5V_Encoder_EN1_Pin, GPIO_PIN_SET  )
#define GPIO_P5V_Encoder_EN1_RESET      HAL_GPIO_WritePin(P5V_Encoder_EN1_GPIO_Port, P5V_Encoder_EN1_Pin, GPIO_PIN_RESET)

#define GPIO_P5V_Encoder_EN2_SET        HAL_GPIO_WritePin(P5V_Encoder_EN2_GPIO_Port, P5V_Encoder_EN2_Pin, GPIO_PIN_SET  )
#define GPIO_P5V_Encoder_EN2_RESET      HAL_GPIO_WritePin(P5V_Encoder_EN2_GPIO_Port, P5V_Encoder_EN2_Pin, GPIO_PIN_RESET)

#define GPIO_MCU_IO3_SET                HAL_GPIO_WritePin(MCU_IO3_GPIO_Port, MCU_IO3_Pin, GPIO_PIN_SET  )
#define GPIO_MCU_IO3_RESET              HAL_GPIO_WritePin(MCU_IO3_GPIO_Port, MCU_IO3_Pin, GPIO_PIN_RESET)

#define GPIO_P12V_Flow_EN_SET           HAL_GPIO_WritePin(P12V_Flow_EN_GPIO_Port, P12V_Flow_EN_Pin, GPIO_PIN_SET  )
#define GPIO_P12V_Flow_EN_RESET         HAL_GPIO_WritePin(P12V_Flow_EN_GPIO_Port, P12V_Flow_EN_Pin, GPIO_PIN_RESET)

#define GPIO_P12V_Water_EN_SET          HAL_GPIO_WritePin(P12V_Water_EN_GPIO_Port, P12V_Water_EN_Pin, GPIO_PIN_SET  )
#define GPIO_P12V_Water_EN_RESET        HAL_GPIO_WritePin(P12V_Water_EN_GPIO_Port, P12V_Water_EN_Pin, GPIO_PIN_RESET)

#define GPIO_P3V8_EN_SET                HAL_GPIO_WritePin(P3V8_EN_GPIO_Port, P3V8_EN_Pin, GPIO_PIN_SET  )
#define GPIO_P3V8_EN_RESET              HAL_GPIO_WritePin(P3V8_EN_GPIO_Port, P3V8_EN_Pin, GPIO_PIN_RESET)

#define GPIO_Display_EN_SET             HAL_GPIO_WritePin(Display_EN_GPIO_Port, Display_EN_Pin, GPIO_PIN_SET  )
#define GPIO_Display_EN_RESET           HAL_GPIO_WritePin(Display_EN_GPIO_Port, Display_EN_Pin, GPIO_PIN_RESET)

void io_control( void );

#endif